#ifndef __DYNAMICARRAYL_H__
#define __DYNAMICARRAYL_H__
#include<cstddef>
using ElementType= void*;
class DynamicArray
{
public:
DynamicArray( void (*freePtr)(ElementType),void (*printPtr)(ElementType),int (*equalPtr)(ElementType,ElementType),size_t capacity=10);
DynamicArray(const DynamicArray&a);
void operator=(const DynamicArray&a);
~DynamicArray();
size_t Size();
//扩容函数
void Resize(size_t capacity);

//尾部插入
void InsertTail(const ElementType&element);

void Show();

void InsertHead(const ElementType&element);

void InsertIndex(int index,const ElementType&element);

//按位置
void RemoveByindex(int index);
//按值删除
void RemoveByElement(const ElementType&element);
//按位置查
ElementType* FindByIndex(int index);

DynamicArray FindByElement(const ElementType &element);

void UpdateByIndex(int index,const ElementType&element);

void UpdateByElement(const ElementType& oldv ,const ElementType & newv);

//去重算法
void Duplicate();
// void FastSort1(int start,int end);
DynamicArray Merge(const DynamicArray&a);
// 交集
DynamicArray FindIntSctn(const DynamicArray&a);
//并集
DynamicArray FindUn(const DynamicArray&a);
//不及
DynamicArray Finddefe(const DynamicArray&a);
//判断相等
bool operator==(const DynamicArray&a);
//二分查找
size_t BinarySearch(const ElementType&element);
//查找一个数列是不是子数列
bool IsChild(const DynamicArray&a);

bool IscntnsChild(const DynamicArray&a);
//获取子序列
DynamicArray Subsequence(int index,size_t size);
//
void SetFreePtr();
//排序
void Sort();
private:
    size_t Partition(size_t start,size_t end);
    void FastSort(size_t start,size_t end,size_t deepth,size_t maxdeep);
    void InsertSort(size_t start,size_t end);
    size_t capacity;
    size_t size;
    ElementType *array;
    void (*freePtr)(ElementType);//数组元素释放
    void (*printPtr)(ElementType);//打印元素的函数指针
    // bool (*SortPtr)(ElementType,ElementType);//排序指针
    int (*equalPtr)(ElementType,ElementType);//比较指针
    
};



























#endif